class Solution {
    public int singleNumber(int[] nums) {
        int[] k = new int[32];
        int len = nums.length;
        int i = 0;
        int j = 0;
        for(i = 0;i<len;i++) {
            for(j = 0;j<32;j++) {
                if(1 == ((nums[i]>>j)&1)) {
                    k[j]++;
                }
            }
        }
        int res = 0;
        for(i = 0;i< 31;i++) {
            //(k[i] % 3) << i 如果当前k%3为1的话,把这个1左移到应该在的高位
            //|= 之前的数字和高位结合在一起
            res |= (k[i] % 3) << i;
           
        } 
        return res;
    }
}